package niuke.week02;

import java.util.Scanner;

/**
 给定一个正数数组arr，其中所有的值都为整数，以下是最小不可组成和的概念
 把arr每个子集内的所有元素加起来会出现很多值，其中最小的记为min，最大的记为max
 在区间[min, max]上，如果有数不可以被arr某一个子集相加得到，那么其中最小的那个数是arr的最小不可组成和
 在区间[min, max]上，如果所有的数都可以被arr的某一个子集相加得到，那么max+1是arr的最小不可组成和
 请写函数返回正数数组arr的最小不可组成和
 */
public class MinNunberOfSum {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int []a = new int[n];
        int sum = 0;
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < n; i++){
            a[i] = sc.nextInt();
            sum += a[i];
            min = Math.min(min,a[i]);
        }
        //[0...i]组成和为j的数
        boolean [][]dp = new boolean[n][sum];


        dp[0][a[0]] =true;

        for (int i = 0; i < n; i++) {
            dp[i][0] = true;
        }

        for (int i = 1; i < n; i++) {
            for (int j = 1; j < sum; j++)
                //         用a[i]            不用a[i]
                dp[i][j] = (j-a[i]>=0 && dp[i-1][j-a[i]]) || dp[i-1][j];
        }
        for (int j = min; j < sum; j++) {
            if (!dp[n - 1][j]){
                System.out.println(j);
                return;
            }
        }
        System.out.println(sum+1);
//        System.out.println(dp[n-1][4129]);
    }

}